package com.longxiao.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.longxiao.vo.CommentVo;
import org.apache.ibatis.annotations.Param;

import com.longxiao.entity.Classroom;

public interface ClassroomMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(Classroom record);

    int insertSelective(Classroom record);

    Classroom selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Classroom record);

    int updateByPrimaryKey(Classroom record);
    
    /**
     * 查询老师排期是否冲突
     * 开始时间 <= 选择的开始时间 < 结束时间
     * 开始时间 < 选择的结束时间 <= 结束时间
     * @param param
     * @return
     * 0 不存在排期冲突
     * 1 存在排期冲突
     */
    int selectTchTimeConflict(Map<String, Object> param);

    /**
     * 检查学生排期是否有冲突
     * @param param
     * @return
     */
    int selectStuTimeConflict(Map<String, Object> param);

    /**
     * 查询所有可匹配，未开课的教室列表
     * @param param
     * @return
     */
    List<Classroom> selectUnStartRoomList(Map<String, Object> param);

    /**
     * 查询未匹配成功的房间列表
     * @param param
     * @return
     */
    List<Classroom> selectUnMatchRoomList(Map<String, Object> param);

    /**
     * 更新房间学生数量
     * @param roomId
     * @return
     */
    int incrRoomStuCount(int roomId);

    /**
     * 减少学生数量
     * @param roomId
     * @return
     */
    int decrRoomStuCount(int roomId);

    /**
     * 更新房间状态为匹配成功
     * @param param
     * @return
     */
    int updateRoomToMatch(Map<String, Object> param);

    /**
     * 修改房间状态为取消
     * @param roomId
     * @return
     */
    int updateRoomToCancel(int roomId);

    /**
     * 更新教室为等待状态
     * 只有教室状态在匹配的情况下，并且stu_count = 0的情况下才会更新成功
     * @param roomId
     * @return
     */
    int updateRoomMatchToWait(int roomId);


    /**
     * 老师是否匹配成功
     * @param param
     * @return
     */
    int isMatched(Map<String, Object> param);

    /**
     * 学生匹配成功的房间列表
     * @param param
     * @return
     */
    List<Classroom> stuMatchRoomList(Map<String, Object> param);

    /**
     * 老师匹配成功的房间列表
     * @param param
     * @return
     */
    List<Classroom> tchMatchRoomList(Map<String, Object> param);


    /**
     * 老师查看课程表
     * @param param
     * @return
     */
    List<Classroom> tchCourseSchedule(Map<String, Object> param);

    /**
     * 学生查看课程表
     * @param param
     * @return
     */
    List<Classroom> stuCourseSchedule(Map<String, Object> param);

    /**
     * 学生查看课程学习数量
     * @param param
     * @return
     */
    int stuCourseLearnCount(Map<String, Object> param);
    /**
     * 老师查看已完成的课程信息
     * @param tchId
     * @return
     */
    List<CommentVo> selectTchFinishClass(@Param("tchId")String tchId, @Param("start")int start, @Param("size")int size);
    /**
     * 获取老师已完成且没评价的课程信息
     * @param tchId
     * @return
     */
    List<CommentVo> selectTchFinishClassNoComment(@Param("tchId")String tchId, @Param("offset")int offset, @Param("rows")int rows);
    /**
     * 获取所有已完成未评价的课程
     */
    List<CommentVo> selectAllFinishClassNoComment();
    /**
     * 获取老师已完成且没评价的课程数量
     * @param tchId
     * @return
     */
    int countTchFinishClassNoComment(@Param("tchId")String tchId);
    /**
     * 获取老师已完成且有评价的课程信息
     * @param tchId
     * @return
     */
    List<CommentVo> selectTchFinishClassComment(@Param("tchId")String tchId,@Param("offset")int offset,@Param("rows")int rows);
    /**
     * 获取老师已完成且有评价的课程数量
     * @param tchId
     * @return
     */
    int countTchFinishClassComment(@Param("tchId")String tchId);

    /**
     * 根据给定时间获取改时间应已结束的状态为匹配成功的数据
     * @param date
     * @return
     */
    List<Classroom> selectTimeoutNotFinish(Date date);

    /**
     * 查询老师的未开始上课房间数量
     * @param tchId
     * @return
     */
    int selectUnStartRoomCountByTchId(@Param("tchId") String tchId);

    /**
     * 查询学生的未开始上课房间数量
     * @param stuId
     * @return
     */
    int selectUnStartRoomCountByStuId(@Param("stuId") String stuId);

    /**
     * 查询匹配成功的房间
     * @param stuId
     * @return
     */
    Classroom selectMatchedRoom(@Param("stuId") String stuId);
    /**
     * 查询所有匹配成功的房间信息
     * @return
     */
    List<Classroom> selectAllMatchedRoom();

    /**
     * 查询所有房间列表
     * @param startTime
     * @param endTime
     * @return
     */
    List<Classroom> selectAllClassroom(@Param("startTime") Date startTime,
                                       @Param("endTime") Date endTime,
                                       @Param("tchId")String tchId,
                                       @Param("stuId")String stuId,
                                       @Param("offset") int offset,
                                       @Param("rows") int rows);

    /**
     * 查询所有房间列表数量
     * @param startTime
     * @param endTime
     * @return
     */
    int selectAllClassroomCount(@Param("startTime") Date startTime,
                                @Param("endTime") Date endTime,
                                @Param("tchId")String tchId,
                                @Param("stuId")String stuId);
}